// 创建蛇的类
class Snake{
    constructor(option){
        option = option instanceof Object ? option : {};
        // 给对象添加属性
        // 设置蛇结的宽度和高度属性
        this.width = option.width || 20;
        this.height = option.height || 20;
        // 蛇身的数据
        this.body = [
            {x: 3,y: 2,color: "red"},
            {x: 2,y: 2,color: "blue"},
            {x: 1,y: 2,color: "blue"}
        ];
        // 设置蛇移动的方向,left,top,right,bottom
        this.direction = "right";
        // 添加一个数组，存储所有渲染的div元素
        this.elements =[];
    }
    // 创建一个实例方法
    render(map){
        // 生成对应个数的div元素
        // 遍历数组
        for(let i = 0,len = this.body.length;i<len;i++){
            // 根据数组的每一项数据生成一个新的div元素
            let piece = this.body[i];
            // 创建元素
            let ele = document.createElement("div");
            // 添加样式
            ele.style.width = this.width + "px";
            ele.style.height = this.height + "px";
            ele.style.left = piece.x * this.width + "px";
            ele.style.top = piece.y * this.height + "px";
            ele.style.backgroundColor = piece.color;
            ele.style.position = "absolute";
            map.appendChild(ele);
            // 渲染到指定的父级内部
            // 将添加的新元素存到数组里
            this.elements.push(ele);
        }
        // 把蛇渲染出来
    }
    move(){
        // 让蛇运动起来
        // 蛇身的每一节都要变成上一节的位置
        // 循环需要从最后一项开始，为了避免前面的数据提前发生变化
        for(let i = this.body.length - 1;i>0;i--){
            this.body[i].x = this.body[i-1].x;
            this.body[i].y = this.body[i-1].y;
        }
        // 存储一下蛇头的数据
        this.head = this.body[0];
        // 蛇头要根据方向发生位置变化
        switch(this.direction){
            case "right": 
                this.head.x += 1;
                break;
            case "left": 
                this.head.x -= 1;
                break;
            case "top": 
                this.head.y -= 1;
                break;
            case "bottom":
                this.head.y += 1;
                break;
        }
    }
    remove(){
        // 遍历数组,删除所有元素
        // 数组也需要清空
        for(let i = this.elements.length - 1;i>=0;i--){
            map.removeChild(this.elements[i]);
        }
        this.elements = [];
    }
}